home *** CD-ROM | disk | FTP | other *** search
/ Sprite 1984 - 1993 / Sprite 1984 - 1993.iso / src / lib / c / net / RCS / getservent.c,v < prev    next >
Text File  |  1988-07-20  |  3KB  |  155 lines

  1. head     1.2;
  2. access   ;
  3. symbols  ;
  4. locks    ; strict;
  5. comment  @ * @;
  6.  
  7.  
  8. 1.2
  9. date     88.07.20.14.32.01;  author ouster;  state Exp;
  10. branches ;
  11. next     1.1;
  12.  
  13. 1.1
  14. date     88.06.20.09.57.14;  author ouster;  state Exp;
  15. branches ;
  16. next     ;
  17.  
  18.  
  19. desc
  20. @@
  21.  
  22.  
  23. 1.2
  24. log
  25. @Include netinet/in.h so that htons gets defined.
  26. @
  27. text
  28. @/*
  29.  * Copyright (c) 1983 Regents of the University of California.
  30.  * All rights reserved.
  31.  *
  32.  * Redistribution and use in source and binary forms are permitted
  33.  * provided that this notice is preserved and that due credit is given
  34.  * to the University of California at Berkeley. The name of the University
  35.  * may not be used to endorse or promote products derived from this
  36.  * software without specific prior written permission. This software
  37.  * is provided ``as is'' without express or implied warranty.
  38.  */
  39.  
  40. #if defined(LIBC_SCCS) && !defined(lint)
  41. static char sccsid[] = "@@(#)getservent.c    5.5 (Berkeley) 3/7/88";
  42. #endif /* LIBC_SCCS and not lint */
  43.  
  44. #include <stdio.h>
  45. #include <sys/param.h>
  46. #include <sys/types.h>
  47. #include <sys/socket.h>
  48. #include <netdb.h>
  49. #include <ctype.h>
  50. #include <netinet/in.h>
  51.  
  52. #define    MAXALIASES    35
  53.  
  54. static char SERVDB[] = "/etc/services";
  55. static FILE *servf = NULL;
  56. static char line[BUFSIZ+1];
  57. static struct servent serv;
  58. static char *serv_aliases[MAXALIASES];
  59. static char *any();
  60. int _serv_stayopen;
  61.  
  62. setservent(f)
  63.     int f;
  64. {
  65.     if (servf == NULL)
  66.         servf = fopen(SERVDB, "r" );
  67.     else
  68.         rewind(servf);
  69.     _serv_stayopen |= f;
  70. }
  71.  
  72. endservent()
  73. {
  74.     if (servf) {
  75.         fclose(servf);
  76.         servf = NULL;
  77.     }
  78.     _serv_stayopen = 0;
  79. }
  80.  
  81. struct servent *
  82. getservent()
  83. {
  84.     char *p;
  85.     register char *cp, **q;
  86.  
  87.     if (servf == NULL && (servf = fopen(SERVDB, "r" )) == NULL)
  88.         return (NULL);
  89. again:
  90.     if ((p = fgets(line, BUFSIZ, servf)) == NULL)
  91.         return (NULL);
  92.     if (*p == '#')
  93.         goto again;
  94.     cp = any(p, "#\n");
  95.     if (cp == NULL)
  96.         goto again;
  97.     *cp = '\0';
  98.     serv.s_name = p;
  99.     p = any(p, " \t");
  100.     if (p == NULL)
  101.         goto again;
  102.     *p++ = '\0';
  103.     while (*p == ' ' || *p == '\t')
  104.         p++;
  105.     cp = any(p, ",/");
  106.     if (cp == NULL)
  107.         goto again;
  108.     *cp++ = '\0';
  109.     serv.s_port = htons((u_short)atoi(p));
  110.     serv.s_proto = cp;
  111.     q = serv.s_aliases = serv_aliases;
  112.     cp = any(cp, " \t");
  113.     if (cp != NULL)
  114.         *cp++ = '\0';
  115.     while (cp && *cp) {
  116.         if (*cp == ' ' || *cp == '\t') {
  117.             cp++;
  118.             continue;
  119.         }
  120.         if (q < &serv_aliases[MAXALIASES - 1])
  121.             *q++ = cp;
  122.         cp = any(cp, " \t");
  123.         if (cp != NULL)
  124.             *cp++ = '\0';
  125.     }
  126.     *q = NULL;
  127.     return (&serv);
  128. }
  129.  
  130. static char *
  131. any(cp, match)
  132.     register char *cp;
  133.     char *match;
  134. {
  135.     register char *mp, c;
  136.  
  137.     while (c = *cp) {
  138.         for (mp = match; *mp; mp++)
  139.             if (*mp == c)
  140.                 return (cp);
  141.         cp++;
  142.     }
  143.     return ((char *)0);
  144. }
  145. @
  146.  
  147.  
  148. 1.1
  149. log
  150. @Initial revision
  151. @
  152. text
  153. @d23 1
  154. @
  155.